package org.jsola.hr.provider;

import org.jsola.file.entity.FileVersionDO;
import org.jsola.file.vo.BankCardInfoVO;
import org.jsola.user.core.TokenUser;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.List;
import java.util.Map;

/**
 * @author zxy
 */
public interface IFileProviderService {

    /**
     * 根据下载地址 批量 下载文件，返回zip文件地址
     *
     * @param siteFileUrls    下载地址 https://abc.com/file/api/v1/site/view/inline/40659446784858880/40659446784858624/origin(15).pdf
     * @param zipName         压缩文件名称
     * @param signNoIdCardMap 签署编号-身份证
     * @param tokenUser       当前用户
     * @return FileVersionDO.tempFilePath 文件地址
     */
    FileVersionDO download(List<String> siteFileUrls, String zipName, Map<String, String> signNoIdCardMap, TokenUser tokenUser);

    /**
     * 上传文件
     *
     * @param files        文件
     * @param downloadType 返回地址类型
     * @return 地址
     */
    List<String> generalUpload(List<MultipartFile> files, String downloadType);

    /**
     * 上传文件
     *
     * @param files        文件
     * @param downloadType 返回地址类型
     * @param tokenUser    当前用户
     * @return 地址
     */
    List<String> siteUpload(List<MultipartFile> files, String downloadType, TokenUser tokenUser);

    /**
     * 上传文件
     *
     * @param multipartFile 文件
     * @param downloadType  返回地址类型
     * @return 地址
     */
    List<String> generalUpload(MultipartFile multipartFile, String downloadType);

    /**
     * 上传文件
     *
     * @param file         文件
     * @param downloadType 返回地址类型
     * @return 地址
     */
    List<String> generalUpload(File file, String downloadType);

    /**
     * 上传文件
     *
     * @param file         文件
     * @param downloadType 返回地址类型
     * @param tokenUser    当前用户
     * @return 地址
     */
    String siteUpload(File file, String downloadType, TokenUser tokenUser);

    /**
     * 上传文件
     *
     * @param fileList     文件
     * @param downloadType 返回地址类型
     * @param tokenUser    当前用户
     * @return 地址
     */
    List<String> batchSiteUpload(List<File> fileList, String downloadType, TokenUser tokenUser);

    /**
     * 上传文件
     *
     * @param files       文件
     * @param downloadTyp 返回地址类型
     * @param fileNames   文件名
     * @param tokenUser   当前用户
     * @return 地址
     */
    List<String> uploadAndSetName(MultipartFile[] files, String downloadTyp,String fileNames,TokenUser tokenUser);

    /**
     * 识别银行卡信息
     *
     * @param file 文件
     * @return 银行卡信息
     */
    BankCardInfoVO bankcard(MultipartFile file);

    /**
     * 识别银行卡信息
     *
     * @param bankCardImg 银行卡图片
     * @param tokenUser   当前用户
     * @return 银行卡信息
     */
    BankCardInfoVO bankcard(String bankCardImg, TokenUser tokenUser);
}
